package fr.asip.cps3.exemple.vues.menus;

import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionListener;

import javax.swing.JCheckBoxMenuItem;

/**
 * Classe modélisant un item de menu
 *
 */
public class ItemMenuCheckbox extends JCheckBoxMenuItem {

	private static final long serialVersionUID = -7526600025198078513L;

	/**
	 * Identifiant du menu parent
	 */
	private String idParent;
	
	/**
	 * Identifiant de l'item de menu 
	 */
	private String id;
	
	/**
	 * Détermine si l'item doit être affiché ou non (dans le cas du verrouillage des menus)
	 */
	private boolean actif;
	
	/**
	 * Ecouteur positionné sur l'item de menu
	 */
	private ActionListener actionEcouteur = null;
	
	/**
	 * Constructeur à 5 arguments
	 * @param id Identifiant de l'item de menu
	 * @param idParent Identifiant du menu parent
	 * @param label Libellé de l'item de menu
	 * @param enable Booléen attestant du caractère actionnable de l'item de menu
	 * @param visible Booléen attestant du caractère visible de l'item de menu
	 */
	public ItemMenuCheckbox(String id, String idParent, String label, boolean enable, boolean visible) {
		super(label);
		this.idParent=idParent;
		this.id=id;
		setVisible(visible);
		setEnabled(enable);
		actif=enable;
		setBackground(Color.WHITE);
	}

	/**
	 * Constructeur à 6 arguments
	 * @param id Identifiant de l'item de menu
	 * @param idParent Identifiant du menu parent
	 * @param label Libellé de l'item de menu
	 * @param enable Booléen attestant du caractère actionnable de l'item de menu
	 * @param visible Booléen attestant du caractère visible de l'item de menu
	 * @param ecouteur Ecouteur positionné sur l'item de menu
	 */
	public ItemMenuCheckbox(String id, String idParent, String label, boolean enable, boolean visible,ActionListener ecouteur) {
		this(id,idParent,label,enable,visible);
		setEcouteur(ecouteur);
	}	

	/**
	 * Constructeur à 7 arguments
	 * @param id Identifiant de l'item de menu
	 * @param idParent Identifiant du menu parent
	 * @param label Libellé de l'item de menu
	 * @param bold Booléen de mise en forme "gras" de l'item de menu
	 * @param enable Booléen attestant du caractère actionnable de l'item de menu
	 * @param visible Booléen attestant du caractère visible de l'item de menu
	 * @param ecouteur Ecouteur positionné sur l'item de menu
	 */
	public ItemMenuCheckbox(String id, String idParent, String label, boolean bold, boolean enable, boolean visible,ActionListener ecouteur) {
		this(id,idParent,label,enable,visible,ecouteur);
		if(bold)
			setFont(new Font("Sans-Serif", Font.BOLD, 11));
		
	}

	/**
	 * Accesseur 
	 * @return L'identifiant du menu parent
	 */
	public String getIdParent() {
		return idParent;
	}

	/**
	 * Accesseur 
	 * @return L'identifiant de l'item de menu
	 */
	public String getId() {
		return id;
	}
	
	/**
	 * Mutateur
	 * @param L'identifiant de l'item de menu
	 */
	protected void setId(String id) {
		this.id=id;
	}

	/**
	 * Accesseur
	 * @return L'écouteur positionné sur l'item de menu
	 */
	public ActionListener getActionEcouteur() {
		return actionEcouteur;
	}	
	
	/**
	 * Mutateur
	 * @param L'écouteur Ecouteur positionné sur l'item de menu
	 */
	public void setEcouteur(ActionListener ecouteur){
		
		if(!isEcouteur()) {
			this.addActionListener(ecouteur);
			actionEcouteur=ecouteur;
		}
		
	}

	/**
	 * Retourne un booléen attestant du positionnement d'un écouteur sur l'item de menu
	 * @return Booléen attestant du positionnement d'un écouteur sur l'item de menu
	 */
	public boolean isEcouteur(){
		return actionEcouteur!=null;
	}

	/**
	 * Acceseur
	 * Détermine si l'item doit être affiché ou non (dans le cas du verrouillage des menus)
	 * @return true ou false
	 */
	public boolean isActif() {
		return actif;
	}

	/**
	 * Mutateur
	 * Affecte le booléan permettant de déterminer si l'item doit être affiché ou non (dans le cas du verrouillage des menus)
	 * @param true ou false
	 */
	public void setActif(boolean actif) {
		this.actif = actif;
	}

}
